﻿using System;
using System.Collections.Generic;
using System.Text;

namespace lp_ge_gt
{
    class SubiektGT
    {
        public Boolean install()
        {
            dbConn db = new dbConn(dbConn.connType.saleSystem);
            String[] zapytania = 
            {
                // tworzenie tabeli z danymi do aktualizacji 
                  @"IF  OBJECT_ID ('tw_ce_gs_upd') IS NULL CREATE TABLE tw_ce_gs_upd (tcgs_twId int); "
                , @"IF  OBJECT_ID ('tw_st_gs_upd') IS NULL CREATE TABLE tw_st_gs_upd (tsgs_twId int); "
                // usuwanie wyzwalaczy jeśli istnieją 
                , @"IF OBJECT_ID ('tw_Cena_gekosalle_watch','TR') IS NOT NULL DROP TRIGGER tw_Cena_gekosalle_watch;"
                , @"IF OBJECT_ID ('tw_Stan_gekosalle_watch','TR') IS NOT NULL DROP TRIGGER tw_Stan_gekosalle_watch;"
                // tworzenie wyzwalaczy 
                , @"CREATE TRIGGER tw_Cena_gekosalle_watch  ON tw_Cena AFTER UPDATE AS 
BEGIN 
    INSERT INTO tcgs_twId(tcgs_twId) SELECT tc_IdTowar FROM inserted ;
END
"
                , @"CREATE TRIGGER tw_Stan_gekosalle_watch ON tw_Stan AFTER UPDATE AS 
BEGIN 
    INSERT INTO tw_st_gs_upd(tsgs_twId) SELECT st_TowId FROM inserted;
END
"
            };
            db.query(zapytania, false);
            return false;
        }
        public Boolean uninstall()
        {
            dbConn db = new dbConn(dbConn.connType.saleSystem);
            String[] que = 
            {
                // usuwanie wyzwalaczy jeśli istnieją 
                  "IF OBJECT_ID ('tw_Cena_gekosalle_watch','TR') IS NOT NULL DROP TRIGGER tw_Cena_gekosalle_watch;"
                , "IF OBJECT_ID ('tw_Stan_gekosalle_watch','TR') IS NOT NULL DROP TRIGGER tw_Stan_gekosalle_watch;"
                // usuwanie tabel
                , "IF  OBJECT_ID ('tw_ce_gs_upd') is not null DROP TABLE tw_ce_gs_upd;"
                , "IF  OBJECT_ID ('tw_st_gs_upd') is not null DROP TABLE tw_st_gs_upd;"
            };
            // dopisać wywoływanei; 
            db.query(que, false);
            return false;
        }
        private String kod = "tw_PodstKodKresk";
        public String[][] getPrice()
        {
            return this.getPrice(false);
        }
        public String[][] getPrice(Boolean all)
        {
            // ustawienia grup ?? 
            dbConn db = new dbConn(dbConn.connType.saleSystem);
            String que = "";
            String[][] nazwyCen = db.query("SELECT twp_NazwaCeny1 ,twp_NazwaCeny2 ,twp_NazwaCeny3 ,twp_NazwaCeny4 ,twp_NazwaCeny5 ,twp_NazwaCeny6 ,twp_NazwaCeny7 ,twp_NazwaCeny8 ,twp_NazwaCeny9 ,twp_NazwaCeny10 FROM tw_Parametr");

            String 
                cenaZakupu="",
                cenaSprzedazy = "",
                cenaPromocyjna = "",
                cenaZakupuNazwa = Ustawienia.read("cenaZakupu","-1"),
                cenaSprzedazyNazwa= Ustawienia.read("cenaSprzedazy", "-1"),
                cenaPromocyjnaNazwa = Ustawienia.read("cenaPromocyjna","-1");
            if (nazwyCen.Length != 1) return null;
            if (nazwyCen[0].Length != 10) return null;
            for (int i = 0; i < nazwyCen[0].Length; i++)
            {
                if (nazwyCen[0][i] == cenaZakupuNazwa)
                {
                    cenaZakupu = i.ToString();
                }
                if (nazwyCen[0][i] == cenaSprzedazyNazwa)
                {
                    cenaSprzedazy = i.ToString();
                }
                if (nazwyCen[0][i] == cenaPromocyjnaNazwa)
                {
                    cenaPromocyjna = i.ToString();
                }
            }
            que = "SELECT  " + this.kod;
            if (cenaZakupu != "")
            {
                que += ", tc_CenaNetto" + cenaZakupu;
            }
            else
            {
                que += ", null ";
            }
            if (cenaSprzedazy != "")
            {
                que += ", tc_CenaNetto" + cenaSprzedazy;
            }
            else
            {
                que += ", null ";
            }
            if (cenaPromocyjna != "")
            {
                que += ", tc_CenaNetto" + cenaPromocyjna;
            }
            else
            {
                que += ", null ";
            }
            que += " FROM tw_Cena INNER JOIN tw__Towar ON tc_IdTowar = tw_Id WHERE 1=1 ";
            if (!all)
            {
                que += "AND tw_Id in (SELECT tcgs_twId FROM  tw_ce_gs_upd)";
            }
            que += "-- tw_SklepInternet=1;";
            return db.query(que);
        }

        public String[][] getStock()
        {
            return this.getStock(false);
        }
        public String[][] getStock(Boolean all)
        {
            dbConn db = new dbConn(dbConn.connType.saleSystem);
            String que = "";
            String mag = db.query("SELECT mag_Id FROM sl_Magazyn WHERE 1=1 AND mag_Symbol='" + Ustawienia.read("magazynZrodlo", "MAG") + "'")[0][0];

            que = "SELECT  " + this.kod;
            switch (int.Parse(Ustawienia.read("rezerwacje", "0")))
            {
               
                case 1:
                    que+=", (st_Stan - st_StanRez )";
                    break;
                case 2:
                    que+=", (st_Stan + st_StanRez )";
                    break;
                case 3:
                    que+=", (st_StanRez )";
                    break;
                case 0:
                default:
                    que += ", st_Stan ";
                    break;
            }

            que+="  FROM dbo.tw_Stan INNER  JOIN tw__Towar ON st_TowId = tw_Id WHERE 1=1 AND st_MagId='" + mag + "' ";
            if (!all)
            {
                que += " AND tw_Id in (SELECT tsgs_twId FROM  tw_st_gs_upd)";
            }
            que += "-- tw_SklepInternet=1;";
            return db.query(que);
        }

        public void truncateStockUpdate()
        {
            new dbConn(dbConn.connType.saleSystem).query("TRUNCATE TABLE tw_st_gs_upd;", false);
        }
        public void truncatePriceUpdate()
        {
            new dbConn(dbConn.connType.saleSystem).query("TRUNCATE TABLE tw_ce_gs_upd;", false);
        }

    }
}
